# @Time : 2020/7/17 11:26
# @Author : Fioman 
# @Phone : 13149920693
"""
图像的加法运算有两种方式,第一种是直接使用numpy数组进行相加,或者是使用cv.add()进行相加.
两种相加方式有如下区别:
如果是直接用+号相加,如果是<=255,则就等于原值.如果是大于255,则对256取模. mod(a+b,256)

"""
import cv2 as cv
import numpy as np

img1 = np.random.randint(0, 255, size=(3, 3), dtype=np.uint8)
img2 = np.random.randint(0, 255, size=(3, 3), dtype=np.uint8)

imgAdded = img1 + img2

print("img1 = \n", img1)
print("img2 = \n", img2)
print("img1 + img2 = \n", img1 + img2)

"""
cv.add()函数也可以用来计算图像像素值相加的和,其语法格式为:
cv.add(像素值a,像素值b)
使用cv.add()对像素值a和像素值b进行求和运算时,会得到像素值对应图像的饱和值(最大值).
如果a+b <= 255  结果就是a+b.
如果a+b > 255 结果就是255
"""
img1 = np.random.randint(0, 256, size=(3, 3), dtype=np.uint8)
img2 = np.random.randint(0, 256, size=(3, 3), dtype=np.uint8)

print("img1 = \n", img1)
print("img2 = \n", img2)
img3 = cv.add(img1, img2)
print("cv.add(img1,img2) = \n", img3)

"""
图像的加权和,所谓图像的加权和,就是在计算两幅图像的像素之和的时候,将没一幅图像的权重考虑进来,可以用公式表示为:
dst = saturate(src1*a + src2*b + r)
saturate()表示取饱和值(最大值)
图形进行加权和计算的时候,要求src1和src2必须是大小,类型相同,但是对具体是什么类型和通道没有特殊限制.
它们可以是任意数据类型,也可以有任意数量的通道(灰度图像或彩色图像),只要两者相同即可
Opencv中提供了函数cv.addWeighted(),用来实现图像的加权和(混合,融合),该函数的语法格式为:
dst = cv.addWeighted(src1,alpha,src2,beta,gamma)
alpha 和 beta 是对应src1和src2的对应系数,它们的和可以是1,也可以不是1.
图像1*系数1 + 图像2*系数2 + 亮度调节值.
"""
img1 = np.ones((3,4),dtype=np.uint8)*100
img2 = np.ones((3,4),dtype=np.uint8)*10
gamma = 3
img3 = cv.addWeighted(img1,0.6,img2,5,gamma)
print(img3)

img1 = cv.imread("lena.bmp",cv.IMREAD_GRAYSCALE)
img2 = cv.imread("dollar.bmp",cv.IMREAD_GRAYSCALE)
dim = (500,500)
img1 = cv.resize(img1,dim)
img2 = cv.resize(img2,dim)

img3 = cv.addWeighted(img1,0.5,img2,0.5,20)
cv.imshow("imgAddweighted",img3)

cv.waitKey(0)




































